home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / plaf / basic / BasicTableUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  12.0 KB  |  441 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Point;
  9. import java.awt.Rectangle;
  10. import java.awt.event.ActionListener;
  11. import java.awt.event.FocusListener;
  12. import java.awt.event.KeyListener;
  13. import java.util.Enumeration;
  14. import java.util.Hashtable;
  15. import javax.swing.CellRendererPane;
  16. import javax.swing.JComponent;
  17. import javax.swing.JScrollPane;
  18. import javax.swing.JTable;
  19. import javax.swing.KeyStroke;
  20. import javax.swing.ListSelectionModel;
  21. import javax.swing.LookAndFeel;
  22. import javax.swing.UIManager;
  23. import javax.swing.event.MouseInputListener;
  24. import javax.swing.plaf.ComponentUI;
  25. import javax.swing.plaf.TableUI;
  26. import javax.swing.plaf.UIResource;
  27. import javax.swing.table.JTableHeader;
  28. import javax.swing.table.TableCellRenderer;
  29. import javax.swing.table.TableColumn;
  30. import javax.swing.table.TableColumnModel;
  31.  
  32. public class BasicTableUI extends TableUI {
  33.    protected JTable table;
  34.    protected CellRendererPane rendererPane;
  35.    protected KeyListener keyListener;
  36.    protected FocusListener focusListener;
  37.    protected MouseInputListener mouseInputListener;
  38.    private Hashtable registeredKeyStrokes = new Hashtable();
  39.  
  40.    // $FF: synthetic method
  41.    static void access$0(JTable var0, int var1, int var2, boolean var3, boolean var4) {
  42.       updateSelection(var0, var1, var2, var3, var4);
  43.    }
  44.  
  45.    // $FF: synthetic method
  46.    static Hashtable access$1(BasicTableUI var0) {
  47.       return var0.registeredKeyStrokes;
  48.    }
  49.  
  50.    protected FocusListener createFocusListener() {
  51.       return new FocusHandler(this);
  52.    }
  53.  
  54.    protected KeyListener createKeyListener() {
  55.       return new KeyHandler(this);
  56.    }
  57.  
  58.    protected MouseInputListener createMouseInputListener() {
  59.       return new MouseInputHandler(this);
  60.    }
  61.  
  62.    private Dimension createTableSize(long var1) {
  63.       int var3 = this.table.getRowCount() * (this.table.getRowHeight() + this.table.getRowMargin());
  64.       int var4 = this.table.getColumnModel().getColumnMargin() * this.table.getColumnCount();
  65.       long var5 = Math.abs(var1) + (long)var4;
  66.       if (var5 > 2147483647L) {
  67.          var5 = 2147483647L;
  68.       }
  69.  
  70.       return new Dimension((int)var5, var3);
  71.    }
  72.  
  73.    public static ComponentUI createUI(JComponent var0) {
  74.       return new BasicTableUI();
  75.    }
  76.  
  77.    public Dimension getMaximumSize(JComponent var1) {
  78.       long var2 = 0L;
  79.  
  80.       TableColumn var5;
  81.       for(Enumeration var4 = this.table.getColumnModel().getColumns(); var4.hasMoreElements(); var2 += (long)var5.getMaxWidth()) {
  82.          var5 = (TableColumn)var4.nextElement();
  83.       }
  84.  
  85.       return this.createTableSize(var2);
  86.    }
  87.  
  88.    public Dimension getMinimumSize(JComponent var1) {
  89.       long var2 = 0L;
  90.  
  91.       TableColumn var5;
  92.       for(Enumeration var4 = this.table.getColumnModel().getColumns(); var4.hasMoreElements(); var2 += (long)var5.getMinWidth()) {
  93.          var5 = (TableColumn)var4.nextElement();
  94.       }
  95.  
  96.       return this.createTableSize(var2);
  97.    }
  98.  
  99.    public Dimension getPreferredSize(JComponent var1) {
  100.       long var2 = 0L;
  101.  
  102.       TableColumn var5;
  103.       for(Enumeration var4 = this.table.getColumnModel().getColumns(); var4.hasMoreElements(); var2 += (long)var5.getPreferredWidth()) {
  104.          var5 = (TableColumn)var4.nextElement();
  105.       }
  106.  
  107.       return this.createTableSize(var2);
  108.    }
  109.  
  110.    protected void installDefaults() {
  111.       LookAndFeel.installColorsAndFont(this.table, "Table.background", "Table.foreground", "Table.font");
  112.       Color var1 = this.table.getSelectionBackground();
  113.       if (var1 == null || var1 instanceof UIResource) {
  114.          this.table.setSelectionBackground(UIManager.getColor("Table.selectionBackground"));
  115.       }
  116.  
  117.       Color var2 = this.table.getSelectionForeground();
  118.       if (var2 == null || var2 instanceof UIResource) {
  119.          this.table.setSelectionForeground(UIManager.getColor("Table.selectionForeground"));
  120.       }
  121.  
  122.       Color var3 = this.table.getGridColor();
  123.       if (var3 == null || var3 instanceof UIResource) {
  124.          this.table.setGridColor(UIManager.getColor("Table.gridColor"));
  125.       }
  126.  
  127.       Container var4 = this.table.getParent();
  128.       if (var4 != null) {
  129.          var4 = ((Component)var4).getParent();
  130.          if (var4 != null && var4 instanceof JScrollPane) {
  131.             LookAndFeel.installBorder((JScrollPane)var4, "Table.scrollPaneBorder");
  132.          }
  133.       }
  134.  
  135.    }
  136.  
  137.    protected void installKeyboardActions() {
  138.       byte var1 = 1;
  139.       byte var2 = 2;
  140.       int var3 = var1 | var2;
  141.       this.registerKey(39, 0, 1, 0);
  142.       this.registerKey(37, 0, -1, 0);
  143.       this.registerKey(40, 0, 0, 1);
  144.       this.registerKey(38, 0, 0, -1);
  145.       this.registerKey("KP_RIGHT", 1, 0);
  146.       this.registerKey("KP_LEFT", -1, 0);
  147.       this.registerKey("KP_DOWN", 0, 1);
  148.       this.registerKey("KP_UP", 0, -1);
  149.       this.registerKey(39, var1, 1, 0);
  150.       this.registerKey(37, var1, -1, 0);
  151.       this.registerKey(40, var1, 0, 1);
  152.       this.registerKey(38, var1, 0, -1);
  153.       this.registerKey("shift KP_RIGHT", 1, 0);
  154.       this.registerKey("shift KP_LEFT", -1, 0);
  155.       this.registerKey("shift KP_DOWN", 0, 1);
  156.       this.registerKey("shift KP_UP", 0, -1);
  157.       this.registerScrollKey(33, 0, false, true, false);
  158.       this.registerScrollKey(34, 0, true, true, false);
  159.       this.registerScrollKey(36, 0, false, false, true);
  160.       this.registerScrollKey(35, 0, true, false, true);
  161.       this.registerScrollKey(33, var1, false, true, false);
  162.       this.registerScrollKey(34, var1, true, true, false);
  163.       this.registerScrollKey(36, var1, false, false, true);
  164.       this.registerScrollKey(35, var1, true, false, true);
  165.       this.registerScrollKey(33, var2, false, false, false);
  166.       this.registerScrollKey(34, var2, true, false, false);
  167.       this.registerScrollKey(36, var2, false, true, true);
  168.       this.registerScrollKey(35, var2, true, true, true);
  169.       this.registerScrollKey(33, var3, false, false, false);
  170.       this.registerScrollKey(34, var3, true, false, false);
  171.       this.registerScrollKey(36, var3, false, true, true);
  172.       this.registerScrollKey(35, var3, true, true, true);
  173.       this.registerKey(9, 0, 1, 0, true, false, true);
  174.       this.registerKey(9, var1, -1, 0, true, false, true);
  175.       this.registerKey(10, 0, 0, 1, true, false, true);
  176.       this.registerKey(10, var1, 0, -1, true, false, true);
  177.       this.registerKeyboardAction(new 1(this), KeyStroke.getKeyStroke(65, var2));
  178.       this.registerKeyboardAction(new 2(this), KeyStroke.getKeyStroke(27, 0));
  179.       this.registerKeyboardAction(new 3(this), KeyStroke.getKeyStroke(113, 0));
  180.    }
  181.  
  182.    protected void installListeners() {
  183.       this.focusListener = this.createFocusListener();
  184.       this.keyListener = this.createKeyListener();
  185.       this.mouseInputListener = this.createMouseInputListener();
  186.       this.table.addFocusListener(this.focusListener);
  187.       this.table.addKeyListener(this.keyListener);
  188.       this.table.addMouseListener(this.mouseInputListener);
  189.       this.table.addMouseMotionListener(this.mouseInputListener);
  190.    }
  191.  
  192.    public void installUI(JComponent var1) {
  193.       this.table = (JTable)var1;
  194.       this.rendererPane = new CellRendererPane();
  195.       this.table.add(this.rendererPane);
  196.       this.installDefaults();
  197.       this.installListeners();
  198.       this.installKeyboardActions();
  199.    }
  200.  
  201.    private int lastVisibleRow(Rectangle var1) {
  202.       int var2 = this.table.rowAtPoint(new Point(0, var1.y + var1.height - 1));
  203.       if (var2 == -1) {
  204.          var2 = this.table.getRowCount() - 1;
  205.       }
  206.  
  207.       return var2;
  208.    }
  209.  
  210.    public void paint(Graphics var1, JComponent var2) {
  211.       Rectangle var3 = var1.getClipBounds();
  212.       Rectangle var4 = new Rectangle(var3);
  213.       int var5 = this.table.getColumnModel().getTotalColumnWidth();
  214.       var4.width = Math.min(var4.width, var5);
  215.       var1.setClip(var4);
  216.       this.paintGrid(var1);
  217.       int var6 = this.table.rowAtPoint(new Point(0, var4.y));
  218.       int var7 = this.lastVisibleRow(var4);
  219.       Rectangle var8 = new Rectangle(0, 0, var5, this.table.getRowHeight() + this.table.getRowMargin());
  220.       var8.y = var6 * var8.height;
  221.  
  222.       for(int var9 = var6; var9 <= var7; ++var9) {
  223.          if (var8.intersects(var4)) {
  224.             this.paintRow(var1, var9);
  225.          }
  226.  
  227.          var8.y += var8.height;
  228.       }
  229.  
  230.       var1.setClip(var3);
  231.    }
  232.  
  233.    private void paintCell(Graphics var1, Rectangle var2, int var3, int var4) {
  234.       int var5 = this.table.getRowMargin();
  235.       int var6 = this.table.getColumnModel().getColumnMargin();
  236.       var2.setBounds(var2.x + var6 / 2, var2.y + var5 / 2, var2.width - var6, var2.height - var5);
  237.       if (this.table.isEditing() && this.table.getEditingRow() == var3 && this.table.getEditingColumn() == var4) {
  238.          Component var9 = this.table.getEditorComponent();
  239.          var9.setBounds(var2);
  240.          var9.validate();
  241.       } else {
  242.          TableCellRenderer var7 = this.table.getCellRenderer(var3, var4);
  243.          Component var8 = this.table.prepareRenderer(var7, var3, var4);
  244.          if (var8.getParent() == null) {
  245.             this.rendererPane.add(var8);
  246.          }
  247.  
  248.          this.rendererPane.paintComponent(var1, var8, this.table, var2.x, var2.y, var2.width, var2.height, true);
  249.       }
  250.  
  251.       var2.setBounds(var2.x - var6 / 2, var2.y - var5 / 2, var2.width + var6, var2.height + var5);
  252.    }
  253.  
  254.    private void paintGrid(Graphics var1) {
  255.       var1.setColor(this.table.getGridColor());
  256.       if (this.table.getShowHorizontalLines()) {
  257.          this.paintHorizontalLines(var1);
  258.       }
  259.  
  260.       if (this.table.getShowVerticalLines()) {
  261.          this.paintVerticalLines(var1);
  262.       }
  263.  
  264.    }
  265.  
  266.    private void paintHorizontalLines(Graphics var1) {
  267.       Rectangle var2 = var1.getClipBounds();
  268.       int var3 = this.table.rowAtPoint(new Point(0, var2.y));
  269.       int var4 = this.lastVisibleRow(var2);
  270.       int var5 = this.table.getColumnModel().getTotalColumnWidth();
  271.       int var6 = this.table.getRowHeight() + this.table.getRowMargin();
  272.       int var7 = var6 * var3;
  273.  
  274.       for(int var8 = var3; var8 <= var4; ++var8) {
  275.          var7 += var6;
  276.          var1.drawLine(0, var7 - 1, var5 - 1, var7 - 1);
  277.       }
  278.  
  279.    }
  280.  
  281.    private void paintRow(Graphics var1, int var2) {
  282.       Rectangle var3 = var1.getClipBounds();
  283.       int var4 = 0;
  284.       boolean var5 = false;
  285.       int var6 = -1;
  286.       Rectangle var7 = null;
  287.       Dimension var8 = this.table.getIntercellSpacing();
  288.       JTableHeader var9 = this.table.getTableHeader();
  289.       Rectangle var10 = new Rectangle();
  290.       var10.height = this.table.getRowHeight() + var8.height;
  291.       var10.y = var2 * var10.height;
  292.  
  293.       for(Enumeration var11 = this.table.getColumnModel().getColumns(); var11.hasMoreElements(); ++var4) {
  294.          TableColumn var12 = (TableColumn)var11.nextElement();
  295.          var10.width = var12.getWidth() + var8.width;
  296.          if (var10.intersects(var3)) {
  297.             var5 = true;
  298.             if (var9 != null && var12 == var9.getDraggedColumn()) {
  299.                var1.setColor(this.table.getParent().getBackground());
  300.                var1.fillRect(var10.x, var10.y, var10.width, var10.height);
  301.                var7 = new Rectangle(var10);
  302.                var6 = var4;
  303.             } else {
  304.                this.paintCell(var1, var10, var2, var4);
  305.             }
  306.          } else if (var5) {
  307.             break;
  308.          }
  309.  
  310.          var10.x += var10.width;
  311.       }
  312.  
  313.       if (var6 != -1 && var7 != null) {
  314.          var7.x += var9.getDraggedDistance();
  315.          var1.setColor(this.table.getBackground());
  316.          var1.fillRect(var7.x, var7.y, var7.width, var7.height);
  317.          var1.setColor(this.table.getGridColor());
  318.          int var16 = var7.x;
  319.          int var13 = var7.y;
  320.          int var14 = var16 + var7.width - 1;
  321.          int var15 = var13 + var7.height - 1;
  322.          if (this.table.getShowVerticalLines()) {
  323.             var1.drawLine(var14, var13, var14, var15);
  324.          }
  325.  
  326.          if (this.table.getShowHorizontalLines()) {
  327.             var1.drawLine(var16, var15, var14, var15);
  328.          }
  329.  
  330.          this.paintCell(var1, var7, var2, var6);
  331.       }
  332.  
  333.    }
  334.  
  335.    private void paintVerticalLines(Graphics var1) {
  336.       int var2 = 0;
  337.       int var3 = this.table.getColumnCount();
  338.       TableColumnModel var4 = this.table.getColumnModel();
  339.       int var5 = var4.getColumnMargin();
  340.       int var6 = this.table.getRowHeight() + this.table.getRowMargin();
  341.       int var7 = var6 * this.table.getRowCount();
  342.  
  343.       for(int var8 = 0; var8 < var3; ++var8) {
  344.          var2 += var4.getColumn(var8).getWidth() + var5;
  345.          var1.drawLine(var2 - 1, 0, var2 - 1, var7 - 1);
  346.       }
  347.  
  348.    }
  349.  
  350.    private void registerKey(int var1, int var2, int var3, int var4) {
  351.       boolean var5 = (var2 & 2) != 0;
  352.       boolean var6 = (var2 & 1) != 0;
  353.       this.registerKey(var1, var2, var3, var4, var5, var6, false);
  354.    }
  355.  
  356.    private void registerKey(int var1, int var2, int var3, int var4, boolean var5, boolean var6, boolean var7) {
  357.       this.registerKeyboardAction(new NavigationalAction(var3, var4, var5, var6, var7), KeyStroke.getKeyStroke(var1, var2));
  358.    }
  359.  
  360.    private void registerKey(String var1, int var2, int var3) {
  361.       KeyStroke var4 = KeyStroke.getKeyStroke(var1);
  362.       int var5 = var4.getModifiers();
  363.       boolean var6 = (var5 & 2) != 0;
  364.       boolean var7 = (var5 & 1) != 0;
  365.       this.registerKey(var1, var2, var3, var6, var7, false);
  366.    }
  367.  
  368.    private void registerKey(String var1, int var2, int var3, boolean var4, boolean var5, boolean var6) {
  369.       this.registerKeyboardAction(new NavigationalAction(var2, var3, var4, var5, var6), KeyStroke.getKeyStroke(var1));
  370.    }
  371.  
  372.    private void registerKeyboardAction(ActionListener var1, KeyStroke var2) {
  373.       this.registeredKeyStrokes.put(var2, var1);
  374.       this.table.registerKeyboardAction(var1, var2, 1);
  375.    }
  376.  
  377.    private void registerScrollKey(int var1, int var2, boolean var3, boolean var4, boolean var5) {
  378.       boolean var6 = (var2 & 1) != 0;
  379.       this.registerKeyboardAction(new PagingAction((4)null, var6, var3, var4, var5), KeyStroke.getKeyStroke(var1, var2));
  380.    }
  381.  
  382.    protected void uninstallDefaults() {
  383.    }
  384.  
  385.    protected void uninstallKeyboardActions() {
  386.       Enumeration var1 = this.registeredKeyStrokes.keys();
  387.  
  388.       while(var1.hasMoreElements()) {
  389.          KeyStroke var2 = (KeyStroke)var1.nextElement();
  390.          this.table.unregisterKeyboardAction(var2);
  391.       }
  392.  
  393.    }
  394.  
  395.    protected void uninstallListeners() {
  396.       this.table.removeFocusListener(this.focusListener);
  397.       this.table.removeKeyListener(this.keyListener);
  398.       this.table.removeMouseListener(this.mouseInputListener);
  399.       this.table.removeMouseMotionListener(this.mouseInputListener);
  400.       this.focusListener = null;
  401.       this.keyListener = null;
  402.       this.mouseInputListener = null;
  403.    }
  404.  
  405.    public void uninstallUI(JComponent var1) {
  406.       this.uninstallDefaults();
  407.       this.uninstallListeners();
  408.       this.uninstallKeyboardActions();
  409.       this.table.remove(this.rendererPane);
  410.       this.rendererPane = null;
  411.       this.table = null;
  412.    }
  413.  
  414.    private static void updateSelection(JTable var0, int var1, int var2, boolean var3, boolean var4) {
  415.       Rectangle var5 = var0.getCellRect(var1, var2, false);
  416.       if (var5 != null) {
  417.          ((JComponent)var0).scrollRectToVisible(var5);
  418.       }
  419.  
  420.       ListSelectionModel var6 = var0.getSelectionModel();
  421.       ListSelectionModel var7 = var0.getColumnModel().getSelectionModel();
  422.       updateSelectionModel(var7, var2, var3, var4);
  423.       updateSelectionModel(var6, var1, var3, var4);
  424.    }
  425.  
  426.    private static void updateSelectionModel(ListSelectionModel var0, int var1, boolean var2, boolean var3) {
  427.       if (!var3) {
  428.          if (!var2) {
  429.             var0.setSelectionInterval(var1, var1);
  430.          } else if (var0.isSelectedIndex(var1)) {
  431.             var0.removeSelectionInterval(var1, var1);
  432.          } else {
  433.             var0.addSelectionInterval(var1, var1);
  434.          }
  435.       } else {
  436.          var0.setLeadSelectionIndex(var1);
  437.       }
  438.  
  439.    }
  440. }
  441.